﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    //题目分析，求以某一个位置开始，左边是上升子序列，右边是下降子序列
    //两者的长度相加-1的最大值(中间位置的值重复)
    //可以是纯上升，也可以是纯下降

    //求最长递增子序列
    //动态规划：f[i]表示以vec[i]结尾的最长子序列
    //动态表示方程：if(vec[i] > vec[j]) f[i] = max(f[i],f[j] + 1);
    //初始化：f[0] = 0
    //填表顺序：从左往右
    //返回值：无

    //求最长递减子序列，发过来的最长递增子序列
    //动态表示：g[i]表示以vec[i]为结尾的最长递减子序列
    //动态转移方程：g[i] = max(g[i],g[j] + 1)
    //初始化：g[n - 1] = 1
    //填表顺序：从左往右
    //返回值无

    int n = 0;
    cin >> n;
    vector<int> vec(n + 1, 0);
    for (int i = 1; i < n + 1; ++i)
    {
        cin >> vec[i];
    }

    vector<int> f(n + 1, 0);
    for (int i = 1; i < n + 1; ++i)//更新最长递增子序列
    {
        f[i] = 1;//最开始只有自己一个
        for (int j = 1; j < i; ++j)
        {
            if (vec[i] > vec[j])
            {
                f[i] = max(f[i], f[j] + 1);
            }
        }
    }

    vector<int> g(n + 1, 0);
    for (int i = n; i > 0; --i)//更新最长递减子序列
    {
        g[i] = 1;//最开始只有自己一个
        for (int j = n; j > i; --j)
        {
            if (vec[i] > vec[j])
            {
                g[i] = max(g[i], g[j] + 1);
            }
        }
    }

    int result = 0;
    for (int i = 1; i < n + 1; ++i)
    {
        result = max(f[i] + g[i] - 1, result);
    }

    cout << n - result << endl;
    return 0;
}

/*
N位同学站成一排，音乐老师要请其中的 (N-K) 位同学出列，
使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形：设K位同学从左到右依次编号为 1，2…，K，
他们的身高分别为 T1，T2，…，TK，  则他们的身高满足
t1<t2...< ti > ti+1 >...> tk−1 > tk(1≤i≤k)你的任务是
，已知所有 n 位同学的身高，计算最少需要几位同学出列，
可以使得剩下的同学排成合唱队形。

数据范围：1≤n≤1000,身高满足130≤ti≤230
输入描述：
第一行输入一个正整数 n 表示同学的总数。
第二行有 n 个整数，用空格分隔，第 i 个整数 ti 是第 i 位同学的身高(厘米)。
输出描述：
输出仅有一个整数，即最少需要几个同学出列

示例1
输入：
8
186 186 150 200 160 130 197 220
输出：
4
*/

